const queue = [];
export function queueJob(job) {
  if (!queue.includes(job)) {
    queue.push(job);
    queueFlush();
  }
}
let isFlushPending = false;
function queueFlush() {
  if (!isFlushPending) { // 多次调用 queueFlush 函数，也只是执行以下代码下一次
    isFlushPending = true;
    Promise.resolve().then(flushJobs);
  }
}

function flushJobs() {
  isFlushPending = false;
  // 清空队列, 根据调用时的顺序一次刷新， 保证先刷新父组件再去刷新子组件
  queue.sort((a, b) => a.id - b.id); // 这个 id 是在 effect.ts 中的 createReactiveEffect 函数中的 reactiveEffect 内设置的 id 唯一标识符号

  for(let i = 0; i < queue.length; i++) {
    const job = queue[i];
    job();
  }

  queue.length = 0;

}